iT邦幫忙

2021 iThome 鐵人賽

DAY 24
1

甚麼是指標(Pointer)?

指標可以拿來存取電腦的記憶體位址,所以,我們在使用指標變數之前,要先了解何謂記憶體位址。
我們可以把記憶體空間想像成一排大樓的信箱,每一個儲存單位都擁有數字編號的位址,我們如果單純設定變數,其實是把我們要的值放入記憶體空間裡面,所以記憶體裡面的值可以改變,但是記憶體位址是固定的。(可以想成一棟房子的地址是固定的,但裡面住的人可以改變、可以搬家)

看個例子:
如果我們程式碼寫成 int X = 38;
假設這個變數會被配置於 0x7ffff34fff00 的位址
畫成圖來表示:

從上面的圖很明顯的可以知道,我們宣告了一個變數 X,其值為 38,然後我們配置了 4 bytes 的記憶體給他(通常宣告int需要 4 bytes)

如何取得變數記憶體位址?

我們可以使用 C 語言的 & 取址運算子來取得變數記憶體位址。
來看一下程式碼:

#include<stdio.h>
int main(){
	int x = 38;
	printf("變數x的值 = %d\n", x);
	printf("變數x的位址 = %p\n", &x);
	return 0;
} 

輸出結果如下:

我們透過程式輸出可以看到,變數的值與位址的差別!

還記得在第七天 C 的輸入輸出函式有提到 scanf() 函式,其逗號後面我們要用 & 再加上變數名稱嗎?
其實是因為 scanf() 函式後面必須傳入地址,所以才要加上 & 去取址,但如果是傳入陣列的話,就不需要用 & (陣列其實是宣告第一個陣列位址)!
我們來看一個程式例子:

#include<stdio.h>
int main(){
	int arr[3] = {0};
	int i = 0;
	printf("請輸入一個變數 >>");
	scanf("%d", arr+2);
	for(i=0; i<3; i++)
		printf("%d ", arr[i]);
	return 0;
}

輸出結果:

程式碼解釋:

  • 先宣告一個長度是 3 的陣列,且裡面的元素都初始值都是 0
  • 輸入一個數字,這個數字會被放在陣列 index = 2 的地方(如果只寫 arr,會被放入 arr 陣列的第一個位址,也就是 arr[0] )。
  • 輸出陣列元素

可以看到,我們輸入的變數真的被放入 arr[2] 裡面了!

今天講了指標最基本的一些小東西,但其實指標的概念還有好多好多,所以明天要繼續介紹~


上一篇
【Day 23】Bubble sort 範例
下一篇
【Day 25】指標介紹(中)
系列文
C 語言的簡單入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言